home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 7 / Gekikoh Dennoh Club Vol. 7 (Japan).7z / Gekikoh Dennoh Club Vol. 7 (Japan) (Track 01).bin / games / otoko / source.lzh / FuncEnemy / mvlaserh.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-06-14  |  2.3 KB  |  106 lines

  1. #include <xsp2lib.h>
  2.  
  3. #include "../otoko.h"
  4. #include "../player.h"
  5. #include "../enemy.h"
  6. #include "../eshot.h"
  7. #include "../effect.h"
  8. #include "../priority.h"
  9. #include "../sound.h"
  10.  
  11. #define PALET_MVLASERH    0x0400
  12. #define SPEED_LASER        28
  13.  
  14. static short EnemyMoveMvLaserH (ENEMY *);
  15. static void EnemyTiniMvLaserH (ENEMY *);
  16.  
  17.  
  18. void EnemyInitMvLaserH (ENEMY * p)
  19. {
  20.     p->vx = 0;
  21.     p->vy = 0;
  22.     p->hit_px = 24;
  23.     p->hit_py = 16;
  24.     p->hit_sx = 24;
  25.     p->hit_sy = 16;
  26.     p->hit_cx = 6;
  27.     p->damage = 0;
  28.     p->flash = 0;
  29.     p->hp = 200;
  30.     p->pt = obj_mvlaserh;
  31.     p->seq = 0;
  32.     p->m_work = 0;
  33.  
  34.     p->func_enemy_move = EnemyMoveMvLaserH;
  35.     p->func_enemy_tini = EnemyTiniMvLaserH;
  36. }
  37.  
  38.  
  39.  
  40. static short EnemyMoveMvLaserH (ENEMY * p)
  41. {
  42.     signed short offset_y[20] =
  43.     {-32, -48, -47, -47, -46, -46, -45, -44, -43, -42,
  44.      -41, -40, -39, -38, -37, -36, -35, -34, -33, -32};
  45.  
  46.     if ((p->child_kill) || (p->child_death))
  47.         return (-1);    /* 消去 */
  48.  
  49.     switch (p->seq) {
  50.     case 0:        /* 発射待ち状態 */
  51.         p->x = (p->parent->x) + SHORT_LX;
  52.         p->y = (p->parent->y) + SHORT_LY;
  53.         break;
  54.     case 1:        /* EnemyMoveLaser() の中で 1 になる */
  55.         if (p->m_work == 0) {    /* 最初の1回は何故か2発撃つ(小細工) */
  56.             EshotInit (ESHOT_LASEREX, p->x, p->y + 16, SPEED_LASER, 64, 0);
  57.             SoundSetSE (SE_LASER);    /* レーザー効果音を鳴らす */
  58.         }
  59.         EshotInit (ESHOT_LASEREX, p->x, p->y + 32, SPEED_LASER, 64, 0);
  60.         p->x = (p->parent->x) + SHORT_LX;
  61.         p->y = (p->parent->y) + SHORT_LY + 32 + offset_y[p->m_work];
  62.         if (p->m_work++ > 17) {
  63.             p->seq = 0;
  64.             p->m_work = 0;
  65.         }
  66.         break;
  67.     }
  68.  
  69.     /* 自機ショットに当たった時の処理 */
  70.     if (p->damage) {
  71.         if (p->damage_core) {
  72.             SoundSetSE (SE_CORE_DAMAGE);
  73.             p->info = PALET_RED | PRIORITY_BOSS_PARTS;
  74.             p->damage_core = 0;
  75.         } else {
  76.             SoundSetSE (SE_DAMAGE);
  77.             p->info = PALET_DAMAGE | PRIORITY_BOSS_PARTS;
  78.         }
  79.         if ((p->hp -= p->damage) <= 0) {
  80.             EffectInit (EFFECT_EXPL, 0, p->x, p->y);
  81.             SoundSetSE (SE_EXPL);    /* ザコ爆発音 */
  82.             p->child_death = !0;    /* 消去準備 */
  83.         }
  84.         p->damage = 0;
  85.         p->flash = TIMER_FLASH_DAMAGE;
  86.     } else {
  87.         if ((p->flash++ > TIMER_FLASH_RED) && (p->hp < 30)) {
  88.             p->info = PALET_RED | PRIORITY_BOSS_PARTS;
  89.             if (p->flash > TIMER_FLASH_NORMAL)
  90.                 p->flash = 0;
  91.         } else {
  92.             p->info = PALET_MVLASERH | PRIORITY_BOSS_PARTS;
  93.         }
  94.     }
  95.  
  96.     xobj_set_st (p);
  97.  
  98.     return (0);
  99. }
  100.  
  101.  
  102.  
  103. static void EnemyTiniMvLaserH (ENEMY * p)
  104. {
  105. }
  106.